package com.shopoo.oauth.domain.repository;


import java.util.List;

import com.shopoo.dto.PageResponse;
import com.shopoo.oauth.domain.entity.User;
import com.shopoo.oauth.domain.valueobject.UserAuth;
import com.shopoo.oauth.domain.valueobject.UserQuery;

/**
 * @Description 用户仓库
 * @Date 2020/5/24 1:51 下午
 * @Author <a href="mailto:android_li@sina.cn">Joe</a>
 **/
public interface UserRepository {

    /**
     * 保存用户
     * @param user
     * @Return void
     * @Date: 2022/3/17 1:02 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    void add(User user);

    /**
     * 根据用户ID删除权限信息
     * @param userId
     * @Return void
     * @Date: 2022/3/15 11:46 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */
    void removeByUserId(String userId);

    /**
     * 根据用户名获取用户信息
     * @param username
     * @Return com.shopoo.oauth.domain.user.UserAuth
     * @Date: 2022/3/15 11:40 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    UserAuth getByUsername(String username);

    /**
     * 分页查找用户信息
     * @param userQuery
     * @Return com.shopoo.dto.PageResponse<com.shopoo.oauth.domain.entity.User>
     * @Date: 2022/3/17 7:56 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    PageResponse<User> getPageByConditions(UserQuery userQuery);

    /**
     * 根据条件查找用户信息
     * @param userQuery
     * @Return java.util.List<com.shopoo.oauth.domain.entity.User>
     * @Date: 2022/3/17 7:46 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<User> getByConditions(UserQuery userQuery);

    /**
     * 查找用户信息
     * @param userQuery
     * @Return java.util.List<com.shopoo.oauth.domain.user.User>
     * @Date: 2022/3/15 11:40 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<User> getUsers(UserQuery userQuery);

    /**
     * 根据用户ID查找用户信息
     * @param userId
     * @Return java.util.List<com.shopoo.oauth.domain.user.User>
     * @Date: 2022/3/15 11:44 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */
    User getByUserId(String userId);

    /**
     * 根据角色ID查找用户信息
     * @param roleId
     * @Return java.util.List<com.shopoo.oauth.domain.user.User>
     * @Date: 2022/3/15 11:44 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    List<User> getByRoleId(Long roleId);
    
    /**
     * 修改用户信息
     * @param user
     * @Return void
     * @Date: 2022/3/17 1:49 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    void updateById(User user);
}
